package com.atguigu.gulimall.search.vo;

import com.atguigu.common.to.SkuEsModel;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * @create: 2024/9/1
 * @author: gyhe10
 * @description: 商城检索接口的返回结果
 **/

@Data
public class SearchResult {
    /**
     * 查询到的所有商品信息
     */
    private List<SkuEsModel> products;

    // ******* 商品检索接口需要返回的分页信息 *******

    /**
     * 总记录数
     */
    private Long total;

    /**
     * 总页码
     */
    private Integer totalPages;
    /**
     * 当前页
     */
    private Integer pageNum;

    /**
     * 根据检索结果总页数，设置所有导航页码
     */
    private List<Integer> pageNavs;

    // ******* 以下是检索接口返回给页面的信息 *******

    /**
     * 查询结果涉及的所有分类
     */
    private List<CatalogVo> catalogs;

    /**
     * 查询结果涉及的所有品牌
     */
    private List<BrandVo> brands;

    /**
     * 查询结果涉及的所有属性
     */
    private List<AttrVo> attrs;

    // ******* 以上是检索接口返回给页面的信息 *******

    /**
     * 面包屑导航数据
     *
     */
    private List<NavVo> navs = new ArrayList<>();
    /**
     * 检索结果涉及的属性中，被作为检索条件进一步检索的属性 ID 集合（也就是已经被添加到面包屑导航的属性 ID 集合）
     */
    private List<Long> attrIds = new ArrayList<>();

    @Data
    public static class NavVo {
        /**
         * 面包屑导航的名称
         * 如果用户在之前检索结果的基础上，点击检索结果涉及的属性做进一步检索，面包屑导航的名称就是点击属性的属性名
         * 如果用户在之前检索结果的基础上，点击检索结果涉及的品牌做进一步检索，面包屑导航的名称就是 “品牌”
         * 如果用户在之前检索结果的基础上，点击检索结果涉及的三级分类做进一步检索，面包屑导航的名称就是 “分类”
         */
        private String navName;
        /**
         * 面包屑导航的值
         * 如果用户在之前检索结果的基础上，点击检索结果涉及的属性做进一步检索，面包屑导航的值就是点击属性的属性值
         * 如果用户在之前检索结果的基础上，点击检索结果涉及的品牌做进一步检索，面包屑导航的值就是点击品牌的名称
         * 如果用户在之前检索结果的基础上，点击检索结果涉及的三级分类做进一步检索，面包屑导航的值就是点击三级分类的三级分类名称
         */
        private String navValue;
        /**
         * 取消面包屑导航后，跳转的url
         */
        private String link;
    }

    @Data
    public static class CatalogVo {
        private Long catalogId;
        private String catalogName;
    }

    @Data
    public static class BrandVo {
        private Long brandId;
        private String brandName;
        private String brandImg;
    }

    @Data
    public static class AttrVo {
        private Long attrId;
        private String attrName;
        private List<String> attrValues;
    }
}
